home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / progs / editor / frexxed / fpl / commentmode.fpl < prev    next >
Text File  |  1996-04-02  |  4KB  |  135 lines

  1. // $Id: CommentMode.FPL 1.11 1996/04/02 18:37:31 jskov Exp $
  2. // $VER: CommentMode.FPL 2.2 (15.06.95) © Jesper Skov
  3.  
  4. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Comment Preference Interface ««
  5. void export CommentModePrefs()
  6. {
  7.   PromptInfo(-1,"Comment preferences",-1,-1,
  8.     "comment_column",
  9.     "comment_end",
  10.     "comment_start",
  11.     "comment_start_skip",
  12.     "line_comment_body",
  13.     "line_comment_end",
  14.     "line_comment_start"
  15.    );
  16. }
  17.  
  18. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» LineComment() ««
  19. void export LineComment()
  20. {
  21.   int width = ReadInfo("wall_right");
  22.   string comment = joinstr(" ",PromptString("","Enter line comment","")," ");
  23.   int col;
  24.   string output;
  25.   string body = ReadInfo("line_comment_body");
  26.   string start = ReadInfo("line_comment_start");
  27.   string end = ReadInfo("line_comment_end");
  28.  
  29.   if ((strlen(comment)!=2) && (strlen(comment) < (width - strlen(start) - strlen(end)))){
  30.     if (width==0)                            // Fallback if no right_wall
  31.       width = 79;
  32.  
  33.     output += ReadInfo("line_comment_start");
  34.     for (col = strlen(start); col < (width-strlen(end)-1-strlen(comment)); col++)
  35.       output = joinstr(output, body);
  36.  
  37.     GotoLine(ReadInfo("line"));                // on an empty line
  38.  
  39.     output = joinstr(output, comment, ReadInfo("line_comment_end"));
  40.  
  41.     if (1!=ReadInfo("line_length"))
  42.       output += "\n";
  43.  
  44.     Output(output);
  45.   }
  46. }
  47.  
  48. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» InsertComment() ««
  49. void export InsertComment()
  50. {
  51.   string tempString=GetLine();
  52.  
  53.   GotoLine(ReadInfo("line"));
  54.  
  55.   if (Search(ReadInfo("comment_start_skip"), "=f+w+", ReadInfo("line_length"))){
  56.     // Let's make a new comment!
  57.     string com=joinstr(ReadInfo("comment_start"), ReadInfo("comment_end"));
  58.     GotoLine(ReadInfo("line"), ReadInfo("line_length"));
  59.     Output(com);
  60.     CursorLeft(strlen(com));
  61.   }
  62.  
  63.   // There is already a comment!
  64.   if (ReadInfo("comment_column")!=ReadInfo("column")){
  65.     // Wrong indent!
  66.     int i=ReadInfo("byte_position");
  67.     int cont=1;
  68.  
  69.     if (1<strlen(tempString)){
  70.       while (i>0 && cont){
  71.         i--;
  72.         if (!Isspace(tempString[i]))
  73.           cont=0;
  74.       }
  75.       if (CursorLeft(ReadInfo("byte_position")-i-1))
  76.         DeleteWord();
  77.     }
  78.     IndentToCC();                            // Get correct indention
  79.   }
  80.   CursorRight(strlen(ReplaceMatch(ReadInfo("comment_start_skip"), "\\&")));
  81. }
  82.  
  83. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» IndentToCC ««
  84. void IndentToCC()
  85. {
  86.   int col = ReadInfo("comment_column") - ReadInfo("column");
  87.   int tab = ReadInfo("tab_size");
  88.   string out;
  89.    
  90.   if (0 >= col)
  91.     out= " ";                                // simply insert one space
  92.   else {
  93.     if(ReadInfo("indent_uses_tabs")){
  94.       if ((ReadInfo("column")/tab+1)*tab <= ReadInfo("comment_column"))
  95.         Output("\t");                        // First align to tabular column
  96.       col = ReadInfo("comment_column") - ReadInfo("column");
  97.       while(col>=tab){                        // Then work by calculating
  98.         out += "\t";
  99.         col = col-tab;
  100.       }
  101.     }
  102.     while(col>0){
  103.       out += " ";
  104.       col--;
  105.     }
  106.   }
  107.   Output(out);
  108. }
  109.  
  110. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Key bindings ««
  111. AssignKey("InsertComment();","amiga ;", "comment_mode"); 
  112. AssignKey("LineComment();","amiga :", "comment_mode");
  113.  
  114. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» Info variables ««
  115. ConstructInfo("comment_column","","","WHLI","",1,999,45);
  116.  
  117. ConstructInfo("comment_start_skip","","","WHLS","",0,0,"//\\*+ ");
  118. ConstructInfo("comment_start","","","WHLS","",0,0,"/* ");
  119. ConstructInfo("comment_end","","","WHLS","",0,0," */");
  120.  
  121. ConstructInfo("line_comment_body","","","WHLS","",0,0,"»");
  122. ConstructInfo("line_comment_end","","","WHLS","",0,0,"««");
  123. ConstructInfo("line_comment_start","","","WHLS","",0,0,"//");
  124.  
  125. ConstructInfo("indent_uses_tabs","","","WLB","",0,1,1);
  126. ConstructInfo("wall_right", "", "", "WIL", "", 0, 999, 79);
  127.  
  128. ConstructInfo("comment_mode","","","LBH","",0,1,0);
  129.  
  130. AddMode(0,"comment_mode", "", ""); // Add as minor mode
  131.  
  132. //»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»» CommentMode menu ««
  133. MenuAdd("s", "CommentMode...", "CommentModePrefs();", "", ReadInfo("menu_program_title"),ReadInfo("menu_program_item"),-1);// Add to PackageSettings
  134. MenuBuild();
  135.